There is a barrel shifter serving as a cyclic shift device which is hardware for performing cyclic shift (rotation) to cyclically shift parallel data made up of a plurality of data.
Now, data making up parallel data serving as an object of cyclic shift will be referred to as input data, and data that the barrel shifter outputs by cyclically shifting a plurality of data making up the parallel data will be referred to as shift data.
For example, with a barrel shifter for performing cyclic shift of M units that is a predetermined integer, parallel data serving as M pieces of input data #1, 2, . . . , #M is cyclically shifted by shift amount k specified from the outside or the like, and M pieces of shift data #1, 2, . . . , #M are output as a result of cyclic shift thereof.
Specifically, now, if we say that, with the barrel shifter, cyclic shift is performed in the direction of the head of the input data #1, 2, . . . #M, according to the cyclic shift of the shift amount k, input data #k+1, . . . , #M, 1, 2, . . . , #k are output as shift data #1, 2, . . . , #M.
Cyclic shift such as described above is needed for decoding of LDPC (Low Density Parity Check) code (e.g., see PTL 1), variable length decoding, and so forth, for example.
Also, in the event that input data #m is one bit, according to cyclic shift, bit operations such as multiplication, and others can be performed with M-bit data as an object.